#define  _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//二维数组的创建
//type arr_name[常量1][常量2];
//常量1 表示行   常量2  表示列

int main()
{
	int arr[3][5];//表示有3行，每一行5个元素
	double arr2[4][5];//表示有4行，每一行5个元素


	return 0;
}

//二维数组的初始化   也是用大括号  “{}”

int main()
{
	int arr[3][5] = { 1,2 };
	int arr2[4][6] = { 0 };//不完全初始化

	int arr3[2][3] = { 1,2,3, 4,5,6 };
	int arr4[3][4] = { 1,1,1,1, 2,2,2,2, 3,3,3,3 };//完全初始化



	return 0;
}

//还可以按行初始化

int main()
{
	int arr[3][5] = { {1,2},{3,4},{5,6} };

	return 0;
}

//二维数组的初始化可以省略行，但是不能省略列

int main()
{
	int arr[][5] = { 1,2,3,4,5,6 };

	return 0;
}

//二维数组的使用
//二维数组的下标  :行是从0开始的，列也是从0开始的

int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
	//输入
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			scanf("%d ", &arr[i][j]);
		}
	}

	//输出
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}


//二维数组在内存中的存储
//二维数组在内存中也是连续存放的
//如果把二维数组的一行是一个一维数组的数组
//那么第一行的这个一维数组的数组名就是arr[0],
//第二行数组名就是arr[1]，以此类推


int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };


	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("&arr[%d][%d] = %p\n",i,j, &arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}